package com.it.data_recursion.HanoiTower;

import com.it.data_tree.util.ColorPrintln;

import java.util.LinkedList;

/**
 * @Author: Coke
 * @DateTime: 2023/06/04/15:07
 * @注释: 汉诺塔
 **/
public class HannoTower {
    static LinkedList<Integer> a = new LinkedList<>(); // 源柱子
    static LinkedList<Integer> b = new LinkedList<>(); // 借柱子
    static LinkedList<Integer> c = new LinkedList<>(); // 目标柱子
    
    public static void init (int n) {
        for (int i = n; i >= 1; i--) {
            a.addLast(i);
        }
    }
    
    public static void move (int n) {
        toMove(n, a, b, c);
    }
    
    /**
     * @param n: 圆盘个数
     * @param a: 源柱子
     * @param b: 借住柱子
     * @param c: 目标柱子
     * @return void
     * @作者: Coke
     * @注释: 移动逻辑
     * @DateTime: 2023/6/4 15:23
     */
    private static void toMove (int n, LinkedList<Integer> a,
                                LinkedList<Integer> b,
                                LinkedList<Integer> c) {
        if (n == 0) {
            return;
        }
        toMove(n - 1, a, c, b); // 前面 a ---> b
        c.addLast(a.removeLast()); // 中间 a --> c
        extracted();
        toMove(n - 1, b, a, c); // 后面
    }
    
    private static void extracted () {
        ColorPrintln.greenPrintln("源：" + HannoTower.a);
        ColorPrintln.yellowPrintln("借：" + HannoTower.b);
        ColorPrintln.pinkPrintln("目：" + HannoTower.c);
        ColorPrintln.bluePrintln("*****************************************************");
    }
    
}
